fix(manifest): host documents project the launch record — kinds, order, transport, pointer (AB6017); install re-measures mode; one portable path rule (#604 follow-up) - #650
Merged
Conversation
… to; host documents agree with the launch record; install re-measures bytes and mode; one portable path rule for files[] and receipts
… drop manifest-only fallback
…rder, over stdio, from the manifest's own pointer (AB6017); schema device-name parity cases
🦋 Changeset detectedLatest commit: 88493de The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
commit: |
This was referenced Sep 5, 2026
Closed
ScriptedAlchemy
enabled auto-merge (squash)
September 5, 2026 23:01
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follow-up to #604 (merged as
632847a39bat headbb241b2818, before the Pass 8/9 self-review fixes on that branch landed). This PR carries exactly those fixes, cherry-picked ontomain(#647/#649 resolved indocs/diagnostics.mdandinstall/receipt.tsimports). Closes the loop on #592 step 3 / #555 W2-S3; #639 (S4 npm root) is unaffected — it stacks on the merged #604.What changes
launch.entry/workerwerefiles[]rowsbundleforcompiled,prebuiltforprebuilt) and the worker abundlerow —parseFileKinds+ sharedartifactManifestFileKindsinweb-host/manifest.ts, used bybuild/manifest.tsvalidateMcpCoherencechecked references individually; a document could rename a server, swap two records' entries, prepend an artifact-local bootstrap, or reach a launchable server over HTTPAB6017: every launchable manifest server for the target appears in the document under its name (validateDeclaredServersPresent); each document server's artifact-local paths, in launch order, start with the record'sentryand pass the record'sartifactarguments in order (validateLaunchAgreement; flags and literals may interleave); a non-stdio document server for a launchable record is refused;projections[host].documents.mcpmust point at the target's MCP document whenever either existsmcp runhostMcpDocumentthrows for a missing document or server)install/doctorinventorymanifestInventorycomparedsha256only, so a post-buildchmodon an indexed row installed as authoritativematchesManifestFile(bytes, mode, digest) asvalidate-artifactuses;AB7001names the differing rowNUL,CON.txt,a:b, trailing dot/space, control chars)isPortablePathSegment(core/paths.ts) behindisRelocatablePosixPath(both parsers),isReceiptPath, and the JSON SchemarelativePathpatternDocs:
docs/diagnostics.md(AB6017,AB7001),website/docs/{en,zh}/reference/artifact-manifest.mdx(lean-reader row,files[].pathrule,AB7001). Changeset:patch.Tests
tests/web-manifest.test.ts,tests/manifest.test.ts: wrong-kind entry, prebuilt entry at a bundle, worker ascopy, duplicate file paths, unknown kind, Windows device name.tests/artifact-validator.test.ts: agreeing document with interleaved literals → none; swapped entry, prepended bootstrap, out-of-orderartifactargs, renamed server,streamable-httpdocument server, absentdocuments.mcppointer →AB6017with the exact message.tests/build-compose.test.ts:mcp runrefuses a root whose document aliases the server (AB6017, nothing spawned); custom adapter flag order still launches.tests/install.test.ts:AB7001on an executable bit the row does not declare;tests/support/install-fixture.ts,tests/public-api-packed.test.tsrecordmodeandbundlekinds the way the compiler does.tests/manifest-schema.test.ts: five portable-segment parity rules + device names in any case and superscript digits rejected by both parser and schema;COM10.log,console.txt,nulled/index.json,lpt.txtaccepted by both.tests/artifact-inspection-service.test.ts: the pointerless-host case is refused at publish by validation.Gates
On
17df7f0d77+ changeset:pnpm install --frozen-lockfile && pnpm build && pnpm typecheck && pnpm lint && pnpm test:unitgreen (4237 passed); integration: combined proof, host install proofs, prebuilt payload, web command, compile evidence, artifact validator, dev host install, build, build-compose, dev web-host routes, package build (234 passed);pnpm test:packed(38) green;pnpm docs:site:buildgreen (parity ok).Self-review
These commits were reviewed on the #604 branch before it merged out from under them:
generalPurposeongpt-5.6-sol-medium, onbb241b2818): 3 must-fix — launch entry kind unchecked / records swappable without document agreement;manifestInventorydigest-only; manifest path rule wider than the receipt rule — all fixed here.runtime.manifestPathwhilemcp runreads the pointer) + 2 should-fix (AB6017doc wording; device-name parity coverage) — all fixed in17df7f0d77. Re-run on the result: no findings.gpt-5.6-sol-medium, 10 edits applied (13 proposed; 3 reverted where the comment gave the reason rather than restating the code).